
def AddEntity(self, data):
    ''' 客户端侧创建新实体时触发 '''
    # event_name = AddEntityClientEvent
    _id           = data["id"]            # str   实体id
    posX          = data["posX"]          # float 位置x
    posY          = data["posY"]          # float 位置y
    posZ          = data["posZ"]          # float 位置z
    dimensionId   = data["dimensionId"]   # int   实体维度
    isBaby        = data["isBaby"]        # bool  是否为幼儿
    engineTypeStr = data["engineTypeStr"] # str   实体类型
    itemName      = data["itemName"]      # str   物品identifier（仅当物品实体时存在该字段）
    auxValue      = data["auxValue"]      # int   物品附加值（仅当物品实体时存在该字段）
    return

def AddPlayerAOI(self, data):
    ''' 玩家加入游戏或者其余玩家进入当前玩家视野时触发的事件，替换AddPlayerEvent '''
    # event_name = AddPlayerAOIClientEvent
    playerId = data["playerId"] # str   玩家id
    return

def AddPlayerCreated(self, data):
    ''' 玩家进入当前玩家所在的区块AOI后，玩家皮肤数据异步加载完成后触发的事件 '''
    # event_name = AddPlayerCreatedClientEvent
    playerId = data["playerId"] # str   玩家id
    return

def ChunkAcquireDiscarded(self, data):
    ''' 客户端区块即将被卸载时 '''
    # event_name = ChunkAcquireDiscardedClientEvent
    dimension = data["dimension"] # int   区块所在维度
    chunkPosX = data["chunkPosX"] # int   区块的x坐标，对应方块X坐标区间为[x * 16, x * 16 + 15]
    chunkPosZ = data["chunkPosZ"] # int   区块的z坐标，对应方块Z坐标区间为[z * 16, z * 16 + 15]
    return

def ChunkLoaded(self, data):
    ''' 客户端区块加载完成时 '''
    # event_name = ChunkLoadedClientEvent
    dimension = data["dimension"] # int   区块所在维度
    chunkPosX = data["chunkPosX"] # int   区块的x坐标，对应方块X坐标区间为[x * 16, x * 16 + 15]
    chunkPosZ = data["chunkPosZ"] # int   区块的z坐标，对应方块Z坐标区间为[z * 16, z * 16 + 15]
    return

def LoadAddonScriptsAfter(self, data):
    ''' 客户端加载mod完成事件 '''
    # event_name = LoadClientAddonScriptsAfter
    # 无参数
    return

def OnCommandOutput(self, data):
    ''' 当command命令有成功消息输出时触发 '''
    # event_name = OnCommandOutputClientEvent
    command = data["command"] # str   命令名称
    message = data["message"] # str   命令返回的消息
    return

def OnLocalPlayerStopLoading(self, data):
    ''' 玩家进入存档，出生点地形加载完成时触发。该事件触发时可以进行切换维度的操作。 '''
    # event_name = OnLocalPlayerStopLoading
    playerId = data["playerId"] # str   加载完成的玩家id
    return

def OnScriptTick(self, data):
    ''' 客户端tick事件,1秒30次 '''
    # event_name = OnScriptTickClient
    # 无参数
    return

def RemoveEntity(self, data):
    ''' 客户端侧实体被移除时触发 '''
    # event_name = RemoveEntityClientEvent
    _id = data["id"] # str   移除的实体id
    return

def RemovePlayerAOI(self, data):
    ''' 玩家离开当前玩家视野时触发的事件 '''
    # event_name = RemovePlayerAOIClientEvent
    playerId = data["playerId"] # str   玩家id
    return

def UnLoadAddonScriptsBefore(self, data):
    ''' 客户端卸载mod之前触发 '''
    # event_name = UnLoadClientAddonScriptsBefore
    # 无参数
    return

def ApproachEntity(self, data):
    ''' 玩家靠近生物时触发 '''
    # event_name = ApproachEntityClientEvent
    playerId = data["playerId"] # str   玩家实体id
    entityId = data["entityId"] # str   靠近的生物实体id
    return

def EntityModelChanged(self, data):
    ''' 实体模型切换时触发 '''
    # event_name = EntityModelChangedClientEvent
    entityId = data["entityId"] # str   实体id
    newModel = data["newModel"] # str   新的模型名字
    oldModel = data["oldModel"] # str   原来的模型名字
    return

def EntityStopRiding(self, data):
    ''' 当实体停止骑乘时 '''
    # event_name = EntityStopRidingEvent
    _id                    = data["id"]                     # str   实体id
    rideId                 = data["rideId"]                 # str   坐骑id
    exitFromRider          = data["exitFromRider"]          # bool  是否下坐骑
    entityIsBeingDestroyed = data["entityIsBeingDestroyed"] # bool  坐骑是否将要销毁
    switchingRides         = data["switchingRides"]         # bool  是否换乘坐骑
    cancel                 = data["cancel"]                 # bool  设置为True可以取消（需要与服务端事件一同取消）
    return

def HealthChange(self, data):
    ''' 生物生命值发生变化时触发 '''
    # event_name = HealthChangeClientEvent
    entityId = data["entityId"] # str   实体id
    _from    = data["from"]     # float 变化前的生命值
    to       = data["to"]       # float 变化后的生命值
    return

def LeaveEntity(self, data):
    ''' 玩家远离生物时触发 '''
    # event_name = LeaveEntityClientEvent
    playerId = data["playerId"] # str   玩家实体id
    entityId = data["entityId"] # str   远离的生物实体id
    return

def OnGround(self, data):
    ''' 实体着地事件。玩家，沙子，铁砧，掉落的物品，点燃的TNT掉落地面时触发，其余实体着地不触发。 '''
    # event_name = OnGroundClientEvent
    _id = data["id"] # str   实体id
    return

def OnMobHitMob(self, data):
    ''' 通过OpenPlayerHitMobDetection打开生物碰撞检测后，当生物间（包含玩家）碰撞时触发该事件。注：客户端和服务端分别作碰撞检测，可能两个事件返回的略有差异。 '''
    # event_name = OnMobHitMobClientEvent
    mobId         = data["mobId"]         # str   当前生物的id
    hittedMobList = data["hittedMobList"] # list[str] 当前生物碰撞到的其他所有生物id的list
    return

def StartRiding(self, data):
    ''' 一个实体即将骑乘另外一个实体 '''
    # event_name = StartRidingClientEvent
    actorId  = data["actorId"]  # str   骑乘者的唯一ID
    victimId = data["victimId"] # str   被骑乘实体的唯一ID
    return

def CameraMotionStart(self, data):
    ''' 相机运动器开始事件。相机添加运动器后，运动器开始运行时触发 '''
    # event_name = CameraMotionStartClientEvent
    motionId = data["motionId"] # int   运动器id
    return

def CameraMotionStop(self, data):
    ''' 相机运动器停止事件。相机添加运动器并开始运行后，运动器自动停止时触发 '''
    # event_name = CameraMotionStopClientEvent
    motionId = data["motionId"] # int   运动器id
    remove   = data["remove"]   # bool  是否移除该运动器，设置为False则保留，默认为True，即运动器停止后自动移除
    return

def DimensionChange(self, data):
    ''' 玩家维度改变时客户端抛出 '''
    # event_name = DimensionChangeClientEvent
    playerId        = data["playerId"]        # str   玩家实体id
    fromDimensionId = data["fromDimensionId"] # int   维度改变前的维度
    toDimensionId   = data["toDimensionId"]   # int   维度改变后的维度
    fromX           = data["fromX"]           # float 改变前的位置x
    fromY           = data["fromY"]           # float 改变前的位置Y
    fromZ           = data["fromZ"]           # float 改变前的位置Z
    toX             = data["toX"]             # float 改变后的位置x
    toY             = data["toY"]             # float 改变后的位置Y
    toZ             = data["toZ"]             # float 改变后的位置Z
    return

def DimensionChangeFinish(self, data):
    ''' 玩家维度改变完成后客户端抛出 '''
    # event_name = DimensionChangeFinishClientEvent
    playerId        = data["playerId"]        # str   玩家实体id
    fromDimensionId = data["fromDimensionId"] # int   维度改变前的维度
    toDimensionId   = data["toDimensionId"]   # int   维度改变后的维度
    toPos           = data["toPos"]           # tuple(float,float,float) 改变后的位置x,y,z,其中y值为脚底加上角色的身高值
    return

def ExtinguishFire(self, data):
    ''' 玩家扑灭火焰时触发。下雨，倒水等方式熄灭火焰不会触发。 '''
    # event_name = ExtinguishFireClientEvent
    pos      = data["pos"]      # tuple(float,float,float) 火焰方块的坐标
    playerId = data["playerId"] # str   玩家id
    cancel   = data["cancel"]   # bool  修改为True时，可阻止玩家扑灭火焰。需要与ExtinguishFireServerEvent一起修改。
    return

def GameTypeChanged(self, data):
    ''' 个人游戏模式发生变化时客户端触发。 '''
    # event_name = GameTypeChangedClientEvent
    playerId    = data["playerId"]    # str   玩家Id
    oldGameType = data["oldGameType"] # int   切换前的游戏模式
    newGameType = data["newGameType"] # int   切换后的游戏模式
    return

def OnPlayerHitBlock(self, data):
    ''' 通过OpenPlayerHitBlockDetection打开方块碰撞检测后，当玩家碰撞到方块时触发该事件。玩家着地时会触发OnGroundClientEvent，而不是该事件。客户端和服务端分别作碰撞检测，可能两个事件返回的结果略有差异。 '''
    # event_name = OnPlayerHitBlockClientEvent
    playerId = data["playerId"] # str   碰撞到方块的玩家Id
    posX     = data["posX"]     # int   碰撞方块x坐标
    posY     = data["posY"]     # int   碰撞方块y坐标
    posZ     = data["posZ"]     # int   碰撞方块z坐标
    blockId  = data["blockId"]  # str   碰撞方块的identifier
    auxValue = data["auxValue"] # int   碰撞方块的附加值
    return

def PerspChange(self, data):
    ''' 视角切换时会触发的事件 '''
    # event_name = PerspChangeClientEvent
    _from = data["from"] # int   切换前的视角
    to   = data["to"]   # int   切换后的视角
    return

def BlockUse(self, data):
    ''' 玩家右键点击新版自定义方块（或者通过接口AddBlockItemListenForUseEvent增加监听的MC原生游戏方块）时客户端抛出该事件（该事件tick执行，需要注意效率问题）。 '''
    # event_name = ClientBlockUseEvent
    playerId  = data["playerId"]  # str   玩家Id
    blockName = data["blockName"] # str   方块的identifier，包含命名空间及名称
    aux       = data["aux"]       # int   方块附加值
    cancel    = data["cancel"]    # bool  设置为True可拦截与方块交互的逻辑。
    posX      = data["x"]         # int   方块x坐标
    posY      = data["y"]         # int   方块y坐标
    posZ      = data["z"]         # int   方块z坐标
    return

def FallingBlockCauseDamageBefore(self, data):
    ''' 当下落的方块开始计算砸到实体的伤害时，客户端触发该事件 '''
    # event_name = FallingBlockCauseDamageBeforeClientEvent
    fallingBlockId   = data["fallingBlockId"]   # int   下落的方块实体id
    fallingBlockX    = data["fallingBlockX"]    # float 下落的方块实体位置x
    fallingBlockY    = data["fallingBlockY"]    # float 下落的方块实体位置y
    fallingBlockZ    = data["fallingBlockZ"]    # float 下落的方块实体位置z
    blockName        = data["blockName"]        # str   重力方块的identifier，包含命名空间及名称
    dimensionId      = data["dimensionId"]      # int   下落的方块实体维度id
    collidingEntitys = data["collidingEntitys"] # list(str) 当前碰撞到的实体列表id（客户端只能获取到玩家），如果没有的话是None
    fallTickAmount   = data["fallTickAmount"]   # int   下落的方块实体持续下落了多少tick
    fallDistance     = data["fallDistance"]     # float 下落的方块实体持续下落了多少距离
    isHarmful        = data["isHarmful"]        # bool  客户端始终为false，因为客户端不会计算伤害值
    fallDamage       = data["fallDamage"]       # int   对实体的伤害
    return

def OnAfterFallOnBlock(self, data):
    ''' 当实体降落到方块后客户端触发，主要用于力的计算 '''
    # event_name = OnAfterFallOnBlockClientEvent
    entityId  = data["entityId"]  # str   实体id
    posX      = data["posX"]      # float 实体位置x
    posY      = data["posY"]      # float 实体位置y
    posZ      = data["posZ"]      # float 实体位置z
    motionX   = data["motionX"]   # float 瞬时移动X方向的力
    motionY   = data["motionY"]   # float 瞬时移动Y方向的力
    motionZ   = data["motionZ"]   # float 瞬时移动Z方向的力
    blockName = data["blockName"] # str   方块的identifier，包含命名空间及名称
    calculate = data["calculate"] # bool  是否按脚本层传值计算力
    return

def OnEntityInsideBlock(self, data):
    ''' 当实体碰撞盒所在区域有方块时，客户端持续触发 '''
    # event_name = OnEntityInsideBlockClientEvent
    entityId       = data["entityId"]       # str   实体id
    dimensionId    = data["dimensionId"]    # int   实体所在维度id
    slowdownMultiX = data["slowdownMultiX"] # float 实体移速X方向的减速比例
    slowdownMultiY = data["slowdownMultiY"] # float 实体移速Y方向的减速比例
    slowdownMultiZ = data["slowdownMultiZ"] # float 实体移速Z方向的减速比例
    blockX         = data["blockX"]         # int   方块位置x
    blockY         = data["blockY"]         # int   方块位置y
    blockZ         = data["blockZ"]         # int   方块位置z
    blockName      = data["blockName"]      # str   方块的identifier，包含命名空间及名称
    cancel         = data["cancel"]         # bool  可由脚本层回传True给引擎，阻止触发后续原版逻辑
    return

def OnModBlockNeteaseEffectCreated(self, data):
    ''' 自定义方块实体绑定的特效创建成功事件，在自定义方块实体中绑定的特效创建成功时触发以及使用接口CreateFrameEffectForBlockEntity或CreateParticleEffectForBlockEntity为自定义方块实体添加特效成功时触发。 '''
    # event_name = OnModBlockNeteaseEffectCreatedClientEvent
    effectName = data["effectName"] # str   创建成功的特效的自定义键值名称
    _id        = data["id"]         # int   该特效的id
    effectType = data["effectType"] # int   该特效的类型，0为粒子特效，1为序列帧特效
    blockPos   = data["blockPos"]   # tuple(float,float,float) 该特效绑定的自定义方块实体的世界坐标
    return

def OnStandOnBlock(self, data):
    ''' 当实体站立到方块上时客户端持续触发 '''
    # event_name = OnStandOnBlockClientEvent
    entityId    = data["entityId"]    # str   实体id
    dimensionId = data["dimensionId"] # int   实体所在维度id
    posX        = data["posX"]        # float 实体位置x
    posY        = data["posY"]        # float 实体位置y
    posZ        = data["posZ"]        # float 实体位置z
    motionX     = data["motionX"]     # float 瞬时移动X方向的力
    motionY     = data["motionY"]     # float 瞬时移动Y方向的力
    motionZ     = data["motionZ"]     # float 瞬时移动Z方向的力
    blockX      = data["blockX"]      # int   方块位置x
    blockY      = data["blockY"]      # int   方块位置y
    blockZ      = data["blockZ"]      # int   方块位置z
    blockName   = data["blockName"]   # str   方块的identifier，包含命名空间及名称
    cancel      = data["cancel"]      # bool  可由脚本层回传True给引擎，阻止触发后续原版逻辑
    return

def PlayerTryDestroyBlock(self, data):
    ''' 当玩家即将破坏方块时，客户端线程触发该事件。主要用于床，旗帜，箱子这些根据方块实体数据进行渲染的方块，一般情况下请使用ServerPlayerTryDestroyBlockEvent '''
    # event_name = PlayerTryDestroyBlockClientEvent
    posX      = data["x"]         # int   方块x坐标
    posY      = data["y"]         # int   方块y坐标
    posZ      = data["z"]         # int   方块z坐标
    face      = data["face"]      # int   方块被敲击的面向id，参考[Facing枚举]
    blockName = data["blockName"] # str   方块的identifier，包含命名空间及名称
    auxData   = data["auxData"]   # int   方块附加值
    playerId  = data["playerId"]  # str   试图破坏方块的玩家ID
    cancel    = data["cancel"]    # bool  默认为False，在脚本层设置为True就能取消该方块的破坏
    return

def ShearsDestoryBlockBefore(self, data):
    ''' 玩家手持剪刀破坏方块时，有剪刀特殊效果的方块会在客户端线程触发该事件 '''
    # event_name = ShearsDestoryBlockBeforeClientEvent
    blockX       = data["blockX"]       # int   方块位置x
    blockY       = data["blockY"]       # int   方块位置y
    blockZ       = data["blockZ"]       # int   方块位置z
    blockName    = data["blockName"]    # str   方块的identifier，包含命名空间及名称
    auxData      = data["auxData"]      # int   方块附加值
    dropName     = data["dropName"]     # str   触发剪刀效果的掉落物identifier，包含命名空间及名称
    dropCount    = data["dropCount"]    # int   触发剪刀效果的掉落物数量
    playerId     = data["playerId"]     # str   触发剪刀效果的玩家id
    dimensionId  = data["dimensionId"]  # int   玩家触发时的维度id
    cancelShears = data["cancelShears"] # bool  是否取消剪刀效果
    return

def StartDestroyBlock(self, data):
    ''' 玩家开始挖方块时触发。创造模式下不触发。 '''
    # event_name = StartDestroyBlockClientEvent
    pos       = data["pos"]       # tuple(float,float,float) 方块的坐标
    blockName = data["blockName"] # str   方块的identifier，包含命名空间及名称
    auxValue  = data["auxValue"]  # int   方块的附加值
    playerId  = data["playerId"]  # str   玩家id
    cancel    = data["cancel"]    # bool  修改为True时，可阻止玩家进入挖方块的状态。需要与StartDestroyBlockServerEvent一起修改。
    return

def StepOffBlock(self, data):
    ''' 实体移动离开一个实心方块时触发 '''
    # event_name = StepOffBlockClientEvent
    blockX      = data["blockX"]      # int   方块x坐标
    blockY      = data["blockY"]      # int   方块y坐标
    blockZ      = data["blockZ"]      # int   方块z坐标
    entityId    = data["entityId"]    # str   触发的entity的唯一ID
    blockName   = data["blockName"]   # str   方块的identifier，包含命名空间及名称
    dimensionId = data["dimensionId"] # int   维度id
    return

def StepOnBlock(self, data):
    ''' 实体刚移动至一个新实心方块时触发。 '''
    # event_name = StepOnBlockClientEvent
    cancel      = data["cancel"]      # bool  是否允许触发，默认为False，若设为True，可阻止触发后续原版逻辑
    blockX      = data["blockX"]      # int   方块x坐标
    blockY      = data["blockY"]      # int   方块y坐标
    blockZ      = data["blockZ"]      # int   方块z坐标
    entityId    = data["entityId"]    # str   触发的entity的唯一ID
    blockName   = data["blockName"]   # str   方块的identifier，包含命名空间及名称
    dimensionId = data["dimensionId"] # int   维度id
    return

def ActorAcquiredItem(self, data):
    ''' 玩家获得物品时客户端抛出的事件（有些获取物品方式只会触发客户端事件，有些获取物品方式只会触发服务端事件，在使用时注意一点。） '''
    # event_name = ActorAcquiredItemClientEvent
    actor          = data["actor"]          # str   获得物品玩家实体id
    secondaryActor = data["secondaryActor"] # str   物品给予者玩家实体id，如果不存在给予者的话，这里为空字符串
    acquireMethod  = data["acquireMethod"]  # int   获得物品的方法，详见[ItemAcquisitionMethod]
    return

def ActorUseItem(self, data):
    ''' 玩家使用物品时客户端抛出的事件（比较特殊不走该事件的例子：1）喝牛奶；2）染料对有水的炼药锅使用；3）盔甲架装备盔甲） '''
    # event_name = ActorUseItemClientEvent
    playerId  = data["playerId"]  # str   玩家实体id
    useMethod = data["useMethod"] # int   使用物品的方法，详见[ItemUseMethodEnum枚举]
    return

def AnvilCreateResultItemAfter(self, data):
    ''' 玩家点击铁砧合成得到的物品时抛出的事件。 '''
    # event_name = AnvilCreateResultItemAfterClientEvent
    playerId     = data["playerId"]     # str   玩家实体id
    itemShowName = data["itemShowName"] # str   合成后的物品显示名称
    return

def ItemTryUse(self, data):
    ''' 玩家点击右键尝试使用物品时客户端抛出的事件，可以通过设置cancel为True取消使用物品。注：如果需要取消物品的使用需要同时在ClientItemTryUseEvent和ServerItemTryUseEvent中将cancel设置为True才能正确取消。 '''
    # event_name = ClientItemTryUseEvent
    playerId = data["playerId"] # str   玩家id
    cancel   = data["cancel"]   # bool  取消使用物品
    return

def ItemUseOn(self, data):
    ''' 玩家在对方块使用物品时客户端抛出的事件。注：如果需要取消物品的使用需要同时在ClientItemUseOnEvent和ServerItemUseOnEvent中将ret设置为True才能正确取消。 '''
    # event_name = ClientItemUseOnEvent
    entityId      = data["entityId"]      # str   玩家实体id
    posX          = data["x"]             # int   方块 x 坐标值
    posY          = data["y"]             # int   方块 y 坐标值
    posZ          = data["z"]             # int   方块 z 坐标值
    blockName     = data["blockName"]     # str   方块的identifier
    blockAuxValue = data["blockAuxValue"] # int   方块的附加值
    face          = data["face"]          # int   点击方块的面，参考[Facing枚举]
    clickX        = data["clickX"]        # float 点击点的x比例位置
    clickY        = data["clickY"]        # float 点击点的y比例位置
    clickZ        = data["clickZ"]        # float 点击点的z比例位置
    ret           = data["ret"]           # bool  设为True可取消物品的使用
    return

def ShapedRecipeTriggered(self, data):
    ''' 玩家合成物品时触发 '''
    # event_name = ClientShapedRecipeTriggeredEvent
    recipeId = data["recipeId"] # str   配方id，对应配方json文件中的identifier字段
    return

def GrindStoneRemovedEnchant(self, data):
    ''' 玩家点击砂轮合成得到的物品时抛出的事件 '''
    # event_name = GrindStoneRemovedEnchantClientEvent
    playerId = data["playerId"] # str   玩家实体id
    exp      = data["exp"]      # int   本次合成返还的经验
    return

def InventoryItemChanged(self, data):
    ''' 玩家背包物品变化时客户端抛出的事件。 '''
    # event_name = InventoryItemChangedClientEvent
    playerId = data["playerId"] # str   玩家实体id
    slot     = data["slot"]     # int   背包槽位
    return

def ItemReleaseUsing(self, data):
    ''' 释放正在使用的物品 '''
    # event_name = ItemReleaseUsingClientEvent
    playerId       = data["playerId"]       # str   玩家id
    durationLeft   = data["durationLeft"]   # float 蓄力剩余时间(当物品缺少"minecraft:maxduration"组件时,蓄力剩余时间为负数)
    maxUseDuration = data["maxUseDuration"] # int   最大蓄力时长
    cancel         = data["cancel"]         # bool  设置为True可以取消，需要同时取消服务端事件ItemReleaseUsingServerEvent
    return

def OnCarriedNewItemChanged(self, data):
    ''' 手持物品发生变化时，触发该事件；数量改变不会通知 '''
    # event_name = OnCarriedNewItemChangedClientEvent
    # 无参数
    return

def PlayerTryDropItem(self, data):
    ''' 玩家丢弃物品时触发 '''
    # event_name = PlayerTryDropItemClientEvent
    playerId = data["playerId"] # str   玩家id
    itemDict = data["itemDict"] # dict  物品dict
    cancel   = data["cancel"]   # bool  是否取消此次操作
    return

def StartUsingItem(self, data):
    ''' 玩家使用物品（目前仅支持Bucket（奶桶）、Trident（三叉戟）、RangedWeapon（弓）、Food（食物）、Potion（药水）、Crossbow（弩））时抛出 '''
    # event_name = StartUsingItemClientEvent
    playerId = data["playerId"] # str   玩家实体id
    return

def StopUsingItem(self, data):
    ''' 玩家停止使用物品（目前仅支持Bucket（奶桶）、Trident（三叉戟）、RangedWeapon（弓）、Food（食物）、Potion（药水）、Crossbow（弩））时抛出 '''
    # event_name = StopUsingItemClientEvent
    playerId = data["playerId"] # str   玩家实体id
    return

def AttackAnimBegin(self, data):
    ''' 攻击动作开始时触发 '''
    # event_name = AttackAnimBeginClientEvent
    _id = data["id"] # str   实体id
    return

def AttackAnimEnd(self, data):
    ''' 攻击动作结束时触发 '''
    # event_name = AttackAnimEndClientEvent
    _id = data["id"] # str   实体id
    return

def WalkAnimBegin(self, data):
    ''' 走路动作开始时触发 '''
    # event_name = WalkAnimBeginClientEvent
    _id = data["id"] # str   实体id
    return

def WalkAnimEnd(self, data):
    ''' 走路动作结束时触发 '''
    # event_name = WalkAnimEndClientEvent
    _id = data["id"] # str   实体id
    return

def ChestClose(self, data):
    ''' 关闭箱子界面时触发，包括小箱子，合并后大箱子和末影龙箱子 '''
    # event_name = ClientChestCloseEvent
    # 无参数
    return

def ChestOpen(self, data):
    ''' 打开箱子界面时触发，包括小箱子，合并后大箱子和末影龙箱子 '''
    # event_name = ClientChestOpenEvent
    playerId = data["playerId"] # str   玩家实体id
    posX     = data["x"]        # int   箱子位置x值
    posY     = data["y"]        # int   箱子位置y值
    posZ     = data["z"]        # int   箱子位置z值
    return

def PlayerInventoryClose(self, data):
    ''' 关闭物品背包界面时触发 '''
    # event_name = ClientPlayerInventoryCloseEvent
    # 无参数
    return

def PlayerInventoryOpen(self, data):
    ''' 打开物品背包界面时触发 '''
    # event_name = ClientPlayerInventoryOpenEvent
    isCreative = data["isCreative"] # bool  是否是创造模式背包界面
    cancel     = data["cancel"]     # bool  取消打开物品背包界面
    return

def CloseNeteaseShop(self, data):
    ''' 关闭商城界面时触发，包括脚本商城和Apollo插件商城 '''
    # event_name = CloseNeteaseShopEvent
    # 无参数
    return

def GridComponentSizeChanged(self, data):
    ''' UI grid组件里格子数目发生变化时触发 '''
    # event_name = GridComponentSizeChangedClientEvent
    # 无参数
    return

def OnItemSlotButtonClicked(self, data):
    ''' 点击快捷栏和背包栏的物品槽时触发 '''
    # event_name = OnItemSlotButtonClickedEvent
    slotIndex = data["slotIndex"] # int   点击的物品槽的编号
    return

def PlayerChatButtonClick(self, data):
    ''' 玩家点击聊天按钮或回车键触发呼出聊天窗口时客户端抛出的事件 '''
    # event_name = PlayerChatButtonClickClientEvent
    # 无参数
    return

def PopScreenAfter(self, data):
    ''' screen移除触发 '''
    # event_name = PopScreenAfterClientEvent
    screenName = data["screenName"] # str   UI名字
    return

def PopScreen(self, data):
    ''' screen移除触发 '''
    # event_name = PopScreenEvent
    screenName = data["screenName"] # str   UI名字
    return

def PushScreen(self, data):
    ''' screen创建触发 '''
    # event_name = PushScreenEvent
    screenName = data["screenName"] # str   UI名字
    return

def ScreenSizeChanged(self, data):
    ''' 改变屏幕大小时会触发的事件 '''
    # event_name = ScreenSizeChangedClientEvent
    beforeX = data["beforeX"] # float 屏幕大小改变前的宽度
    beforeY = data["beforeY"] # float 屏幕大小改变前的高度
    afterX  = data["afterX"]  # float 屏幕大小改变后的宽度
    afterY  = data["afterY"]  # float 屏幕大小改变后的高度
    return

def UiInitFinished(self, data):
    ''' UI初始化框架完成,此时可以创建UI '''
    # event_name = UiInitFinished
    # 无参数
    return

def OnMusicStop(self, data):
    ''' 音乐停止时，当玩家调用StopCustomMusic来停止自定义背景音乐时，会触发该事件 '''
    # event_name = OnMusicStopClientEvent
    musicName = data["musicName"] # str   音乐名称
    return

def PlayMusic(self, data):
    ''' 播放背景音乐时触发 '''
    # event_name = PlayMusicClientEvent
    cancel = data["cancel"] # bool  设为True可屏蔽该次音效播放
    return

def PlaySound(self, data):
    ''' 播放场景音效或UI音效时触发 '''
    # event_name = PlaySoundClientEvent
    name   = data["name"]   # str   即资源包中sounds/sound_definitions.json中的key
    pos    = data["pos"]    # tuple(float,float,float) 音效播放的位置。UI音效为(0,0,0)
    volume = data["volume"] # float 音量，范围为0-1
    pitch  = data["pitch"]  # float 播放速度，正常速度为1
    cancel = data["cancel"] # bool  设为True可屏蔽该次音效播放
    return

def JumpButtonPressDown(self, data):
    ''' 跳跃按钮按下事件，返回值设置参数只对当次按下事件起作用 '''
    # event_name = ClientJumpButtonPressDownEvent
    continueJump = data["continueJump"] # bool  设置是否执行跳跃逻辑
    return

def JumpButtonRelease(self, data):
    ''' 跳跃按钮按下释放事件 '''
    # event_name = ClientJumpButtonReleaseEvent
    # 无参数
    return

def GetEntityByCoord(self, data):
    ''' 玩家点击屏幕时触发，多个手指点在屏幕上时，只有第一个会触发。 '''
    # event_name = GetEntityByCoordEvent
    # 无参数
    return

def GetEntityByCoordRelease(self, data):
    ''' 玩家点击屏幕后松开时触发，多个手指点在屏幕上时，只有最后一个手指松开时触发。 '''
    # event_name = GetEntityByCoordReleaseClientEvent
    # 无参数
    return

def HoldBefore(self, data):
    ''' 玩家长按屏幕，即将响应到游戏内时触发。仅在移动端或pc的F11模式下触发。pc的非F11模式可以使用RightClickBeforeClientEvent事件监听鼠标右键 '''
    # event_name = HoldBeforeClientEvent
    cancel = data["cancel"] # bool  设置为True可拦截原版的挖方块/使用物品/与实体交互响应
    return

def LeftClickBefore(self, data):
    ''' 玩家按下鼠标左键时触发。仅在pc的普通控制模式（即非F11模式）下触发。 '''
    # event_name = LeftClickBeforeClientEvent
    cancel = data["cancel"] # bool  设置为True可拦截原版的挖方块或攻击响应
    return

def LeftClickRelease(self, data):
    ''' 玩家松开鼠标左键时触发。仅在pc的普通控制模式（即非F11模式）下触发。 '''
    # event_name = LeftClickReleaseClientEvent
    # 无参数
    return

def MouseWheel(self, data):
    ''' 鼠标滚轮滚动时触发 '''
    # event_name = MouseWheelClientEvent
    direction = data["direction"] # int   1为向上滚动，0为向下滚动
    return

def OnBackButtonRelease(self, data):
    ''' 返回按钮（目前特指安卓系统导航中的返回按钮）松开时触发 '''
    # event_name = OnBackButtonReleaseClientEvent
    # 无参数
    return

def OnPlayerStartMove(self, data):
    ''' 移动按钮按下触发事件，在按住一个方向键的同时，去按另外一个方向键，不会触发第二次 '''
    # event_name = OnClientPlayerStartMove
    # 无参数
    return

def OnPlayerStopMove(self, data):
    ''' 移动按钮按下释放时触发事件，同时按下多个方向键，需要释放所有的方向键才会触发事件 '''
    # event_name = OnClientPlayerStopMove
    # 无参数
    return

def OnKeyPressInGame(self, data):
    ''' 按键按下或按键释放时触发 '''
    # event_name = OnKeyPressInGame
    screenName = data["screenName"] # str   当前screenName
    isDown     = data["isDown"]     # str   是否按下，按下为1，弹起为0
    return

def OnMouseMiddleDown(self, data):
    ''' 鼠标按下中键时触发 '''
    # event_name = OnMouseMiddleDownClientEvent
    isDown         = data["isDown"]         # int   1为按下，0为弹起
    mousePositionX = data["mousePositionX"] # float 按下时的x坐标
    mousePositionY = data["mousePositionY"] # float 按下时的y坐标
    return

def RightClickBefore(self, data):
    ''' 玩家按下鼠标右键时触发。仅在pc下触发（普通控制模式及F11模式都会触发）。 '''
    # event_name = RightClickBeforeClientEvent
    cancel = data["cancel"] # bool  设置为True可拦截原版的物品使用/实体交互响应
    return

def RightClickRelease(self, data):
    ''' 玩家松开鼠标右键时触发。仅在pc的普通控制模式（即非F11模式）下触发。在F11下右键，按下会触发RightClickBeforeClientEvent，松开时会触发TapOrHoldReleaseClientEvent '''
    # event_name = RightClickReleaseClientEvent
    # 无参数
    return

def TapBefore(self, data):
    ''' 玩家点击屏幕并松手，即将响应到游戏内时触发。仅在移动端或pc的F11模式下触发。pc的非F11模式可以使用LeftClickBeforeClientEvent事件监听鼠标左键 '''
    # event_name = TapBeforeClientEvent
    cancel = data["cancel"] # bool  设置为True可拦截原版的攻击或放置响应
    return

def TapOrHoldRelease(self, data):
    ''' 玩家点击屏幕后松手时触发。仅在移动端或pc的F11模式下触发。pc的非F11模式可以使用LeftClickReleaseClientEvent与RightClickReleaseClientEvent事件监听鼠标松开 '''
    # event_name = TapOrHoldReleaseClientEvent
    # 无参数
    return
